home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyOSQueues.p < prev    next >
Text File  |  1995-11-16  |  2KB  |  76 lines

  1. unit MyOSQueues;
  2.  
  3. interface
  4.  
  5.     uses
  6.         OSUtils;
  7.         
  8.     type
  9.         MyQElem = record
  10.                 qLink: QElemPtr;
  11.                 qType: integer;
  12.             end;
  13.         MyQElemPtr = ^MyQElem;
  14.  
  15.     procedure XEnqueue (qElement: QElemPtr; qHeader: QHdrPtr);
  16.     function XDequeue (qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  17.     procedure Enque (var queue: QHdr; pbp: univ MyQElemPtr; event: integer);
  18.     function Deque (var queue: QHdr; pbp: univ MyQElemPtr; var event: integer): boolean;
  19.     procedure AddEvent (var events: QHdr; pbp: univ MyQElemPtr; event: integer);
  20.     function GetEvent (var events: QHdr; var pbp: univ MyQElemPtr; var event: integer): boolean;
  21.  
  22. implementation
  23.  
  24.     uses
  25.         MyAssertions;
  26.  
  27.     procedure XEnqueue (qElement: QElemPtr; qHeader: QHdrPtr);
  28.     begin
  29. {    Assert(qElement^.ioQElem.qLink = nil);}
  30.         Enqueue(qElement, qHeader);
  31.     end;
  32.  
  33.     function XDequeue (qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  34.         var
  35.             err: OSErr;
  36.     begin
  37.         err := Dequeue(qElement, qHeader);
  38.         if err = noErr then begin
  39.             qElement^.qLink := nil;
  40.         end;
  41.         XDequeue := err;
  42.     end;
  43.  
  44.     procedure Enque (var queue: QHdr; pbp: univ MyQElemPtr; event: integer);
  45.     begin
  46.         pbp^.qType := event;
  47.         XEnqueue(QElemPtr(pbp), @queue);
  48.     end;
  49.  
  50.     procedure AddEvent (var events: QHdr; pbp: univ MyQElemPtr; event: integer);
  51.     begin
  52.         pbp^.qType := event;
  53.         XEnqueue(QElemPtr(pbp), @events);
  54.     end;
  55.  
  56.     function Deque (var queue: QHdr; pbp: univ MyQElemPtr; var event: integer): boolean;
  57.         var
  58.             oe: OSErr;
  59.     begin
  60.         Deque := false;
  61.         if pbp <> nil then begin
  62.             oe := XDequeue(QElemPtr(pbp), @queue);
  63.             if oe = noErr then begin
  64.                 event := pbp^.qType;
  65.                 Deque := true;
  66.             end;
  67.         end;
  68.     end;
  69.  
  70.     function GetEvent (var events: QHdr; var pbp: univ MyQElemPtr; var event: integer): boolean;
  71.     begin
  72.         pbp := MyQElemPtr(events.qHead);
  73.         GetEvent := Deque(events, pbp, event);
  74.     end;
  75.  
  76. end.